/*
 * AlgebraToSQL.java
 *
 * Created on 16 de Junho de 2007, 04:49
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package org.jerm.Interface.JGraph_Algebra;



/**
 *
 * @author ra044637
 */
public class AlgebraToSQL {
    
    private String SQL;
    private int i;
    
    /** Creates a new instance of AlgebraToSQL */
    public AlgebraToSQL(Consulta consulta) {
        i = 1;
        SQL = this.MontaSQL(consulta);
    }
    
    public String getSQL()
    {  
        return this.SQL;
    }
    
    //Funcao que percorre a arvore de consulta recursivamente e vai montando a consulta em SQL
    private String MontaSQL(Consulta c)
    {   
        Object obj = c.getObject();
        String SQL = null;
        
        //Para relacao...
        if(obj.getClass().getName() == "Interface.JGraph_Algebra.Relacao")
        {
            Relacao r = (Relacao) obj;
            SQL = new String("SELECT * FROM " + r.getUserObject().toString());
        }
        
        //Para projecao...
        else if(obj.getClass().getName() == "Interface.JGraph_Algebra.Projecao")
        {
            Projecao p = (Projecao) obj;
            SQL = new String("SELECT "+p.getUserObject().toString()+" FROM ("+MontaSQL(p.getConsulta())+") AS R"+getId());
        }
        
        //Para projecao...
        else if(obj.getClass().getName() == "Interface.JGraph_Algebra.Renomeacao")
        {
            Renomeacao rn = (Renomeacao) obj;
            SQL = new String("SELECT "+rn.getUserObject().toString()+" FROM ("+MontaSQL(rn.getConsulta())+") AS R"+getId());
        }
        
        //Para selecao...
        else if(obj.getClass().getName() == "Interface.JGraph_Algebra.Selecao")
        {
            Selecao s = (Selecao) obj;
            SQL = new String("SELECT * FROM ("+MontaSQL(s.getConsulta())+") AS R"+getId()+" WHERE "+s.getUserObject().toString());
        }
        
        //Para produto...
        else if(obj.getClass().getName() == "Interface.JGraph_Algebra.Produto")
        {
            Produto pc = (Produto) obj;
            SQL = new String("SELECT * FROM ("+MontaSQL(pc.getConsulta1())+") AS R"+getId()+", ("+MontaSQL(pc.getConsulta2())+") AS R"+getId());
        }
        
        //Para juncao...
        else if(obj.getClass().getName() == "Interface.JGraph_Algebra.Juncao")
        {
            Juncao j = (Juncao) obj;
            SQL = new String("SELECT * FROM ("+MontaSQL(j.getConsulta1())+") AS R"+getId()+" INNER JOIN ("+MontaSQL(j.getConsulta2())+") AS R"+getId()+" ON("+j.getUserObject().toString()+")");
        }
        
        
        
        //Falta muito ainda...
        
        return SQL;
    }
    
    private String getId()
    {
        return new String((new Integer(i++)).toString());
    }
}
